﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Practices.ObjectBuilder;
using GC2.Bussines.BMSeguridad;
using GC2.Entities.Seguridad;
using GC2.ExceptionHandler;

public partial class BMSeguridad_AdministracionRoles : GenericPage
{    
    private ExceptionConstructor exNew = new ExceptionConstructor();

    private List<Aplicaciones> aplicaciones = new List<Aplicaciones>();
    private Roles rolBuscado
    {
        get
        {
            if (ViewState["rolBuscado"] != null)
            {
                return (Roles)ViewState["rolBuscado"];
            }
            else
            {
                return new Roles();
            }
        }
        set
        {
            ViewState["rolBuscado"] = value;
        }
    }
    private List<Roles> rolesSource
    {
        get
        {
            if (ViewState["rolesSource"] != null)
            {
                return (List<Roles>)ViewState["rolesSource"];
            }
            else return new List<Roles>();
        }
        set
        {
            ViewState["rolesSource"] = value;
        }
    }

    #region Controles

    /// <Summary>
    /// Se llama cada vez que se carga la página
    /// 
    /// Moficado por: MDT  Fecha: 25/06/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SetearCultura();
            SetearConexion();
            if (!this.IsPostBack)
            {
                //string user;
                //user = LoguedUserName;

                //AutenticacionUsuario();
                //int iId_Usuario = System.Convert.ToInt32(Session["Id_Usuario"]);
                //    string srtPermiso = ControlPermisos((int)UI_Permissions.frmRoles, iId_Usuario);
                //    if (srtPermiso != "S")
                //    {
                //        Response.Redirect("~/Error.aspx", false);
                //    }
                //    else
                //    {
                        BMAplicaciones _aplicacionesPresenter = new BMAplicaciones(Connection);
                        aplicaciones = _aplicacionesPresenter.BMAplicacionesGetAll();
                        DdlAplicacionesDataBound();
                    //}
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    /// <Summary>
    /// Se llama cada vez que se aprieta el botón Buscar. Llena una grilla con los registros 
    /// que cumplen las condiciones de filtrado.
    /// 
    /// Moficado por: MDT  Fecha: 25/06/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        try
        {
            BMRoles _rolesPresenter = new BMRoles(Connection);
            Roles rol = new Roles();
            rol.Nombre_Rol = txtNombreRol.Text.Trim();
            rol.Descripcion_Rol = txtDescripcionRol.Text.Trim();
            rol.Id_Aplicacion = Convert.ToInt32(ddlAplicaciones.Items[ddlAplicaciones.SelectedIndex].Value);
            
            // Guarda las características de la búsqueda
            rolBuscado = rol;

            rolesSource = _rolesPresenter.BMRolesSearch(rol);
            GridDataBound();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    /// <Summary>
    /// Se llama cada vez que se aprieta el botón Nuevo. Redirecciona a ls
    /// página de tabs para crear un nuevo rol.
    /// 
    /// Moficado por: MDT  Fecha: 25/06/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        try
        {
            Roles rol = null;
            Session["Rol"] = rol;
            Response.Redirect("AdministracionRolesTab.aspx", false);
        }
        catch (Exception ex)
        {
            ErrorUI(ex);
        }
    }

    /// <Summary>
    /// Se llama cada vez que se aprieta el botón Cancelar. Redirecciona a ls
    /// página por defecto del módulo de seguridad.
    /// 
    /// Moficado por: MDT  Fecha: 25/06/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        try
        {
            Response.Redirect("../Default.aspx", false);
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    /// <Summary>
    /// Se llama cada vez que se selecciona una fila de la grilla. Redirecciona a ls
    /// página de tabs para modificar un rol.
    /// 
    /// Moficado por: MDT  Fecha: 25/06/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    protected void dgRoles_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            BMRoles _rolesPresenter = new BMRoles(Connection);

            Label label = new Label();
            Roles rol = new Roles();

            label = (Label)dgRoles.Rows[dgRoles.SelectedIndex].Cells[0].FindControl("Id_Rol");
            rol.Id_Rol = int.Parse(label.Text.Trim());
            rol = _rolesPresenter.BMRolesGetOne(rol);
            
            Session["Rol"] = rol;
            Response.Redirect("AdministracionRolesTab.aspx", false);
        }
        catch (Exception ex){ErrorUI(ex);}
    }

    /// <Summary>
    /// Se llama cada vez que se presiona sobre un link "eliminar" de la grilla.
    /// 
    /// Moficado por: MDT  Fecha: 25/06/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    protected void dgRoles_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            BMRoles _rolesPresenter = new BMRoles(Connection);

            Label label = new Label();
            Roles rol = new Roles();
            label = (Label)dgRoles.Rows[e.RowIndex].Cells[0].FindControl("Id_Rol");
            rol.Id_Rol = int.Parse(label.Text.Trim());
            
            // Borra el rol seleccionado
            rol = _rolesPresenter.BMRolesGetOne(rol);
            rol.Fecha_Hasta = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy"));
            _rolesPresenter.BMRolesDelete(rol);

            // Actualiza la grilla
            rolesSource = _rolesPresenter.BMRolesSearch(rolBuscado);
            GridDataBound();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    /// <Summary>
    /// Se llama cada vez que se presiona sobre un número de página de la grilla.
    /// 
    /// Moficado por: MDT  Fecha: 17/07/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    protected void dgRoles_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        dgRoles.PageIndex = e.NewPageIndex;
        GridDataBound();
    }

    #endregion

    #region Métodos

    /// <Summary>
    /// Variable auxiliar global
    /// 
    /// Moficado por: MDT  Fecha: 25/06/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns int></returns int>
    private Roles rolActual
    {
        get
        {
            if (ViewState["rolActual"] != null)
                return (Roles)ViewState["rolActual"];
            else
                return new Roles();
        }
        set
        {
            this.ViewState["rolActual"] = value;
        }
    }

    /// <Summary>
    /// Llena la grilla con los datos encontrados en la tabla Seguridad.Roles
    /// según los criterios de filtrado
    /// 
    /// Moficado por: MDT  Fecha: 25/06/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    private void GridDataBound()
    {
        dgRoles.DataSource = rolesSource;
        dgRoles.DataBind();
    }

    /// <Summary>
    /// Llena el combo de aplicaciones con todas las aplicaciones
    /// 
    /// Moficado por: MDT  Fecha: 13/07/2007
    /// Motivo del Cambio:
    /// 
    /// </Summary>
    /// <returns></returns>
    private void DdlAplicacionesDataBound()
    {
        try
        {
            Aplicaciones a = new Aplicaciones();
            a.Nombre_Aplicacion = "";
            ddlAplicaciones.Items.Add(a.Nombre_Aplicacion);
            ddlAplicaciones.Items[0].Value = Convert.ToString(0);
            int i = 1;
            foreach (Aplicaciones aplicacion in aplicaciones)
            {
                ddlAplicaciones.Items.Add(aplicaciones[i-1].Nombre_Aplicacion);
                ddlAplicaciones.Items[i].Value = Convert.ToString(aplicaciones[i-1].Id_Aplicacion);
                i++;
            }
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    #endregion
}


